var http = require('http')
var fs = require('fs')
var path = require('path')    // path模块提供了与文件系统路径相关的功能
var mime = require('mime')    // mime模块有根据文件拓展名得到mime类型的能力
var cache = {}


// 当文件不存在的时候 发送404错误
function send404(response){
    response.writeHead(404,{'Content-Type':'text/plain'})
    response.write('Error 404 : resource not found')
    response.end()
}


// 发送文件内容
function sendFile(response,filePath,fileContents){
    // console.log(response)
    // console.log(1111111)
    console.log(filePath)
    response.writeHead(200,{'Content-Type':mime.lookup(path.basename(filePath))})
    response.end(fileContents)
}


// 检查文件是否在缓存中
function serveStatic(response,cache,absPath){
    if(cache[absPath]){   //检查文件是否在内存中
        sendFile(response,absPath,cache[absPath])
    }else{
        fs.stat(absPath,function(err){
            if(err){    
                // 没有文件的时候
                send404(response)
            }else{
                // 有文件的时候
                fs.readFile(absPath,function(err,data){
                    if(err){
                        send404(response)
                    }else{
                        cache[absPath] = data
                        console.log(data)
                        sendFile(response,absPath,data)
                    }
                })
            }
        })
    }
}


// 创建HTTP服务器
var server = http.createServer(function(request,response){
    var filePath = false
    if(request.url == '/'){
        // 直接访问根目录
        filePath = 'public/index.html'
    }else{
        filePath = 'public'+request.url
    }

    var absPath = './'+filePath
    serveStatic(response,cache,absPath)   //返回静态文件
})
// 启动HTTP服务器
server.listen(3000,function(){
    console.log('server listening on port 3000.')
})


// 设置socket.io
var chatServer = require('./lib/chat_server')
chatServer.listen(server)

